//
// @author 风杨
// @date 22-10-10 下午7:49
// @see <a href="yueny09@163.com">mailTo: yueny09@163.com</a>
//

struct Excerpt<'a> {
    // 必须在结构体名称后面的尖括号中声明泛型生命周期参数，以便在结构体定义中使用生命周期参数。
    // 这个注解意味着 Excerpt 的实例不能比其 part 字段中的引用存在的更久。
    part : &'a str
}

impl<'a> Excerpt<'a> {
    pub fn level(&self) -> u32 {
        3
    }

    pub fn getLevel(&self, seq: &str) -> &'a str {
        println!("seq please: {}", seq);
        self.part
    }
}

#[test]
fn test(){
    let line = String::from("Call me Ishmael. Some years ago...");
    let first_char = line.split('.').next().unwrap();
    println!("first_char :{}.", first_char);

    // 存放了变量 line 所拥有的 String 的第一个句子的引用。
    let ex = Excerpt {
        part : first_char
    };

    println!("Excerpt part: {}.", ex.part);
    println!("Excerpt level: {}.", ex.level());
    println!("Excerpt getLevel: {}.", ex.getLevel("dfg"));

    // static
    let s1: &'static str = "I have a static lifetime.";
    let s2: &str = "I have a static lifetime.";
    let s3 = "I have a static lifetime.";
    println!("s1, s2, s3: {}/{}/{}.", s1, s2, s3);

    
}
